from cryptography.hazmat.primitives.asymmetric import rsa
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.backends import default_backend
from os import urandom


def generate_aes_key(key_length=32):
    """
    生成一个AES密钥。AES通常使用16（AES-128）、24（AES-192）或32（AES-256）字节的密钥。
    """
    # 简单的做法是直接生成随机字节作为密钥
    # 但实际场景中，密钥可能通过更安全的方式（如PBKDF2）从密码中派生
    # 这里直接生成随机密钥以简化示例
    return urandom(key_length)


# 示例：生成一个AES-256密钥
aes_key = generate_aes_key(32)
print("AES-256密钥:", aes_key.hex())


# 如果你需要从密码派生密钥，可以使用PBKDF2HMAC
def derive_aes_key(password, salt, iterations=100000, key_length=16):
    """
    使用PBKDF2HMAC从密码派生出AES密钥
    """
    kdf = PBKDF2HMAC(
        algorithm=hashes.SHA256(),
        length=key_length,
        salt=salt,
        iterations=iterations,
        backend=default_backend(),
    )
    key = kdf.derive(password.encode())
    return key


# 示例：从密码派生出AES-256密钥
password = "870794bc135c41349bd4214854fc9b1c"
salt = urandom(16)  # 生成一个随机盐
aes_key_derived = derive_aes_key(password, salt)
print("从密码派生的AES-256密钥:", aes_key_derived.hex())
